library(tidyverse)
Warning: package ‘tidyverse’ was built under R version 4.2.3Warning: package ‘ggplot2’ was built under R version 4.2.3Warning: package ‘tibble’ was built under R version 4.2.3Warning: package ‘tidyr’ was built under R version 4.2.3Warning: package ‘readr’ was built under R version 4.2.3Warning: package ‘purrr’ was built under R version 4.2.3Warning: package ‘dplyr’ was built under R version 4.2.3Warning: package ‘forcats’ was built under R version 4.2.3Warning: package ‘lubridate’ was built under R version 4.2.3── Attaching core tidyverse packages ──────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     ── Conflicts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(CodeClanData)

Attaching package: ‘CodeClanData’

The following object is masked from ‘package:dplyr’:

    starwars

The following object is masked from ‘package:tidyr’:

    population
library(plotly)
Warning: package ‘plotly’ was built under R version 4.2.3
Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
game_sales
game_sales %>% 
  group_by(publisher, year_of_release) %>% 
  summarise(num_games_released = n()) %>% 
  plot_ly(x = ~ year_of_release,
          y = ~ num_games_released,
          color = ~ publisher,
          mode = "lines", 
          text = ~ publisher,
          hovertemplate = '<b>%{text}',
          showlegend = F) %>% 
  highlight(on = "plotly_hover")
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
game_sales %>% 
  group_by(publisher) %>% 
  summarise(avg_rating = mean(user_score)) %>% 
  ggplot(aes(reorder(publisher, avg_rating), avg_rating)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

game_sales %>% 
  filter(publisher == "Nintendo") %>% 
  group_by(name) %>% 
  summarise(user_score = mean(user_score),
            critic_score = mean(critic_score)/10) %>% 
  arrange(desc(user_score)) %>% 
  slice_head(n = 10) %>% 
  pivot_longer(user_score:critic_score, names_to = "reviewer", values_to = "score") %>% 
  ggplot() +
  geom_col(aes(x = reorder(name, -score), y = score, fill = reviewer),
           position = "dodge",
           #fill = "lavenderblush2"
  ) +
  # geom_point(aes(x = name, y = critic_score),
  #            #position = "dodge",
  #            colour = "deeppink2") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid = element_blank()) +
  labs(
    title = "Top 10 Games Released by Selected Publisher",
    x = "",
    y = "Rating"
  )

game_sales %>% 
  group_by(publisher, platform) %>% 
  summarise(total_games = n()) %>% 
  ggplot(aes(publisher, total_games, fill = platform)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales <- game_sales %>% 
  mutate(platform_cat = case_when(
    str_detect(platform, "PS") ~ "Playstation",
    str_detect(platform, "X") ~ "Xbox",
    str_detect(platform, "Wii") ~ "Nintendo Wii",
    str_detect(platform, "GC") ~ "Nintendo Gamecube",
    str_detect(platform, "GB") ~ "Nintendo Game Boy",
    str_detect(platform, "DS") ~ "Nintendo DS",
    .default = platform
  ))
game_sales %>% 
  group_by(publisher, platform_cat) %>% 
  summarise(total_games = n()) %>% 
  ggplot(aes(reorder(publisher, -total_games, sum), total_games, fill = platform_cat)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c(
    "Xbox" = "darkgreen",
    "Playstation" = "blue",
    "Nintendo Gamecube" = "red1",
    "Nintendo DS" = "red2",
    "Nintendo Wii" = "red3",
    "Nintendo Game Boy" = "red4",
    "PC" = "black")
  )
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

Games by publisher

colour_scheme <- c(
    "Xbox" = "darkgreen",
    "Playstation" = "blue",
    "Nintendo Gamecube" = "red1",
    "Nintendo DS" = "red2",
    "Nintendo Wii" = "red3",
    "Nintendo Game Boy" = "red4",
    "PC" = "black")

game_sales %>% 
  group_by(publisher, platform_cat) %>% 
  summarise(total_games = n()) %>% 
  plot_ly(y = ~ reorder(publisher, total_games, sum),
          x = ~ total_games,
          color = ~ platform_cat,
          colors = colour_scheme,
          type = "bar"
          ) %>% 
          layout(barmode = "stack",
                 title = "Number of Games Released by Publisher Across Each Platform",
                 yaxis = list(title = ""),
                 xaxis = list(title = "Number of Games released")
                 )
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales %>% 
  group_by(platform_cat, platform) %>% 
  summarise(total = n()) %>% 
  ggplot(aes(platform_cat, total, fill = platform)) +
  geom_col() +
  geom_text(aes(label = platform))
`summarise()` has grouped output by 'platform_cat'. You can override using the `.groups` argument.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShDb2RlQ2xhbkRhdGEpDQpsaWJyYXJ5KHBsb3RseSkNCg0KZ2FtZV9zYWxlcw0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlciwgeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZShudW1fZ2FtZXNfcmVsZWFzZWQgPSBuKCkpICU+JSANCiAgcGxvdF9seSh4ID0gfiB5ZWFyX29mX3JlbGVhc2UsDQogICAgICAgICAgeSA9IH4gbnVtX2dhbWVzX3JlbGVhc2VkLA0KICAgICAgICAgIGNvbG9yID0gfiBwdWJsaXNoZXIsDQogICAgICAgICAgbW9kZSA9ICJsaW5lcyIsIA0KICAgICAgICAgIHRleHQgPSB+IHB1Ymxpc2hlciwNCiAgICAgICAgICBob3ZlcnRlbXBsYXRlID0gJzxiPiV7dGV4dH0nLA0KICAgICAgICAgIHNob3dsZWdlbmQgPSBGKSAlPiUgDQogIGhpZ2hsaWdodChvbiA9ICJwbG90bHlfaG92ZXIiKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlcikgJT4lIA0KICBzdW1tYXJpc2UoYXZnX3JhdGluZyA9IG1lYW4odXNlcl9zY29yZSkpICU+JSANCiAgZ2dwbG90KGFlcyhyZW9yZGVyKHB1Ymxpc2hlciwgLWF2Z19yYXRpbmcpLCBhdmdfcmF0aW5nKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQpgYGB7cn0NCmdhbWVfc2FsZXMgJT4lIA0KICBmaWx0ZXIocHVibGlzaGVyID09ICJBY3RpdmlzaW9uIikgJT4lIA0KICBncm91cF9ieShuYW1lKSAlPiUgDQogIHN1bW1hcmlzZSh1c2VyX3Njb3JlID0gbWVhbih1c2VyX3Njb3JlKSwNCiAgICAgICAgICAgIGNyaXRpY19zY29yZSA9IG1lYW4oY3JpdGljX3Njb3JlKS8xMCkgJT4lIA0KICBhcnJhbmdlKGRlc2ModXNlcl9zY29yZSkpICU+JSANCiAgc2xpY2VfaGVhZChuID0gMTApICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX2NvbChhZXMoeCA9IHJlb3JkZXIobmFtZSwgdXNlcl9zY29yZSksIHkgPSB1c2VyX3Njb3JlKSwgcG9zaXRpb24gPSAiZG9kZ2UiLCBmaWxsID0gImRhcmtvbGl2ZWdyZWVuNCIpICsNCiAgZ2VvbV9wb2ludChhZXMoeCA9IG5hbWUsIHkgPSBjcml0aWNfc2NvcmUpLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG91ciA9ICJicm93bjQiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZmlsdGVyKHB1Ymxpc2hlciA9PSAiTmludGVuZG8iKSAlPiUgDQogIGdyb3VwX2J5KG5hbWUpICU+JSANCiAgc3VtbWFyaXNlKHVzZXJfc2NvcmUgPSBtZWFuKHVzZXJfc2NvcmUpLA0KICAgICAgICAgICAgY3JpdGljX3Njb3JlID0gbWVhbihjcml0aWNfc2NvcmUpLzEwKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh1c2VyX3Njb3JlKSkgJT4lIA0KICBzbGljZV9oZWFkKG4gPSAxMCkgJT4lIA0KICBwaXZvdF9sb25nZXIodXNlcl9zY29yZTpjcml0aWNfc2NvcmUsIG5hbWVzX3RvID0gIlJldmlld2VyIiwgdmFsdWVzX3RvID0gInNjb3JlIikgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fY29sKGFlcyh4ID0gcmVvcmRlcihuYW1lLCAtc2NvcmUpLCB5ID0gc2NvcmUsIGZpbGwgPSBSZXZpZXdlciksDQogICAgICAgICAgIHBvc2l0aW9uID0gImRvZGdlIiwNCiAgICAgICAgICAgI2ZpbGwgPSAibGF2ZW5kZXJibHVzaDIiDQogICkgKw0KICAjIGdlb21fcG9pbnQoYWVzKHggPSBuYW1lLCB5ID0gY3JpdGljX3Njb3JlKSwNCiAgIyAgICAgICAgICAgICNwb3NpdGlvbiA9ICJkb2RnZSIsDQogICMgICAgICAgICAgICBjb2xvdXIgPSAiZGVlcHBpbmsyIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG9wIDEwIEdhbWVzIFJlbGVhc2VkIGJ5IFNlbGVjdGVkIFB1Ymxpc2hlciIsDQogICAgeCA9ICIiLA0KICAgIHkgPSAiUmF0aW5nIg0KICApDQpgYGANCg0KDQoNCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHJlb3JkZXIocHVibGlzaGVyLCAtdG90YWxfZ2FtZXMpLCB0b3RhbF9nYW1lcykpICsNCiAgZ2VvbV9jb2woKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyhwdWJsaXNoZXIsIHRvdGFsX2dhbWVzLCBmaWxsID0gcGxhdGZvcm0pKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyA8LSBnYW1lX3NhbGVzICU+JSANCiAgbXV0YXRlKHBsYXRmb3JtX2NhdCA9IGNhc2Vfd2hlbigNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiUFMiKSB+ICJQbGF5c3RhdGlvbiIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIlgiKSB+ICJYYm94IiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiV2lpIikgfiAiTmludGVuZG8gV2lpIiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiR0MiKSB+ICJOaW50ZW5kbyBHYW1lY3ViZSIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIkdCIikgfiAiTmludGVuZG8gR2FtZSBCb3kiLA0KICAgIHN0cl9kZXRlY3QocGxhdGZvcm0sICJEUyIpIH4gIk5pbnRlbmRvIERTIiwNCiAgICAuZGVmYXVsdCA9IHBsYXRmb3JtDQogICkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybV9jYXQpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX2dhbWVzID0gbigpKSAlPiUgDQogIGdncGxvdChhZXMocmVvcmRlcihwdWJsaXNoZXIsIC10b3RhbF9nYW1lcywgc3VtKSwgdG90YWxfZ2FtZXMsIGZpbGwgPSBwbGF0Zm9ybV9jYXQpKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoDQogICAgIlhib3giID0gImRhcmtncmVlbiIsDQogICAgIlBsYXlzdGF0aW9uIiA9ICJibHVlIiwNCiAgICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAgICJOaW50ZW5kbyBEUyIgPSAicmVkMiIsDQogICAgIk5pbnRlbmRvIFdpaSIgPSAicmVkMyIsDQogICAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgICAiUEMiID0gImJsYWNrIikNCiAgKQ0KYGBgDQojIEdhbWVzIGJ5IHB1Ymxpc2hlcg0KYGBge3J9DQpjb2xvdXJfc2NoZW1lIDwtIGMoDQogICJYYm94IiA9ICJkYXJrZ3JlZW4iLA0KICAiUGxheXN0YXRpb24iID0gImJsdWUiLA0KICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAiTmludGVuZG8gRFMiID0gInJlZDIiLA0KICAiTmludGVuZG8gV2lpIiA9ICJyZWQzIiwNCiAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgIlBDIiA9ICJibGFjayIpDQoNCmdhbWVfc2FsZXMgJT4lIA0KICBncm91cF9ieShwdWJsaXNoZXIsIHBsYXRmb3JtX2NhdCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgcGxvdF9seSh5ID0gfiByZW9yZGVyKHB1Ymxpc2hlciwgdG90YWxfZ2FtZXMsIHN1bSksDQogICAgICAgICAgeCA9IH4gdG90YWxfZ2FtZXMsDQogICAgICAgICAgY29sb3IgPSB+IHBsYXRmb3JtX2NhdCwNCiAgICAgICAgICBjb2xvcnMgPSBjb2xvdXJfc2NoZW1lLA0KICAgICAgICAgIHR5cGUgPSAiYmFyIg0KICApICU+JSANCiAgbGF5b3V0KGJhcm1vZGUgPSAic3RhY2siLA0KICAgICAgICAgdGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIFJlbGVhc2VkIGJ5IFB1Ymxpc2hlciBBY3Jvc3MgRWFjaCBQbGF0Zm9ybSIsDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiIiksDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIHJlbGVhc2VkIikNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGZpbHRlcihwdWJsaXNoZXIgPT0gIk1pZHdheSBHYW1lcyIpICU+JSANCiAgZ3JvdXBfYnkoeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXMpKSArDQogIGdlb21fbGluZSgpICsNCiAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocGxhdGZvcm1fY2F0LCBwbGF0Zm9ybSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyhwbGF0Zm9ybV9jYXQsIHRvdGFsLCBmaWxsID0gcGxhdGZvcm0pKSArDQogIGdlb21fY29sKCkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGxhdGZvcm0pKQ0KYGBgDQoNCg==